Hướng dẫn sử dụng trình xử lý gửi mail thu thập thập đánh giá sản phẩm đến người dùng
Back to ezymarketingAdminSendProductRatingEmailToOneUserWorkflowHandler là trình xử lý workflow dùng để gửi email mời một người dùng đánh giá sản phẩm. Handler này thường được chạy trong một workflow marketing: hệ thống lấy danh sách người tham gia từ participant segment, duyệt từng user, tạo link đánh giá sản phẩm, rồi gửi email theo mail template.Tên handler cần cấu hình trong workflow step là:
send_product_rating_email_to_one_user
Mục Đích
Handler này phục vụ luồng gửi email thu thập đánh giá sản phẩm sau khi người dùng đã mua, dùng thử hoặc tương tác với sản phẩm.
Email được gửi đến từng user, kèm theo các dữ liệu như:
- thông tin user,
- tên sản phẩm,
- ảnh sản phẩm,
- URL website,
- link đánh giá sản phẩm,
- metadata campaign participant segment để theo dõi chiến dịch.
Điều Kiện Để Handler Chạy Đúng
Workflow step phải dùng handler name:
send_product_rating_email_to_one_user
Participant segment phải có
participantType là:users
Participant trả về từ script nên có dạng khuyến nghị:
[lastId, userId, email]
Trong đó:
-
lastId: ID dùng để phân trang segment. -
userId: ID user thật trong hệ thống. -
email: email nhận thư.
Handler cũng hỗ trợ dạng ngắn hơn:
[userId] [userId, email]
Nhưng với workflow executor hiện tại, dạng
[lastId, userId, email] là phù hợp nhất vì executor dùng participant[0] làm page token và participant[1] làm participant id khi lưu thống kê.Luồng Hoạt Động
flowchart TD
A[Workflow executor quét workflow run ACTIVATED] --> B[Lấy campaign participant segment]
B --> C[Lấy participant segment và fetchParticipantsScript]
C --> D[Query tối đa 100 participants theo lastId]
D --> E[Duyệt từng participant]
E --> F[Gọi handler send_product_rating_email_to_one_user]
F --> G{participantType là users?}
G -- Không --> H[Trả về lỗi]
G -- Có --> I[Lấy userId và email]
I --> J[Load user]
J --> K[Load product theo productCode]
K --> L[Tạo ratingLink]
L --> M[Đổ tham số vào mail template]
M --> N[Gửi templated email]
N --> O[Ghi log kết quả]
Cách Handler Tạo Email
Khi nhận input từ workflow executor, handler sẽ:
- Kiểm tra participant type phải là
users. - Lấy
userIdtừ participant. - Lấy email từ participant, nếu không có thì dùng email trong hồ sơ user.
- Đọc
parameterscủa workflow run. - Kiểm tra
productCode. - Tìm sản phẩm theo
productCode. - Lấy ảnh banner của sản phẩm nếu có.
- Lấy
webUrltừ setting hệ thống. - Tạo link đánh giá theo dạng:
{webUrl}/ezyrating/user-ratings/products/{productCode}?fromUserUuid={userUuid}
Nếu user có display name, link sẽ thêm:
&fromUserDisplayName={encodedDisplayName}
Sau đó handler gửi email bằng mail template.
Các Tham Số Chạy Workflow
Khi tạo hoặc chỉnh sửa Workflow Run, trường
parameters cần là JSON object hợp lệ.Ví dụ tối thiểu:
{
"productCode": "PRODUCT_CODE"
}
Ví dụ có chỉ định template:
{
"productCode": "PRODUCT_CODE",
"mailTemplateName": "user_product_rating"
}
Các tham số quan trọng:
| Tham số | Bắt buộc | Mặc định | Ý nghĩa |
|---|---|---|---|
productCode | Có | Không có | Mã sản phẩm cần thu thập đánh giá. Handler dùng mã này để load sản phẩm và tạo link đánh giá. |
mailTemplateName | Không | user_product_rating | Tên mail template dùng để render email. Nếu truyền chuỗi rỗng thì handler báo lỗi. |
Các tham số được handler tự động thêm vào template:
| Tham số | Ý nghĩa |
|---|---|
user | Object user đầy đủ. |
userDisplayName | Tên hiển thị của user. |
userEmail | Email trong hồ sơ user. |
userPhoneNumber | Số điện thoại user. |
userUuid | UUID của user. |
productName | Tên sản phẩm. |
productImage | Object media banner của sản phẩm, nếu có. |
productImageUrl | URL ảnh sản phẩm, hoặc giá trị null-string nếu không có ảnh. |
webUrl | URL website lấy từ setting hệ thống. |
ratingLink | Link để user đánh giá sản phẩm. |
Lưu ý: không nên truyền
locale bằng JSON string trong workflow parameters, vì handler cast trực tiếp sang Locale. Nếu cần locale, nên inject bằng code hoặc mở rộng handler cho case này.Cấu Hình Workflow Run
Các trường chính khi tạo Workflow Run:
| Trường | Ý nghĩa |
|---|---|
workflowId | Workflow chứa step gửi email. |
campaignParticipantSegmentId | Segment người nhận thuộc campaign. |
type | Kiểu chạy: ONE_TIME, LOOP, hoặc CONTINUATION. |
priority | Độ ưu tiên của run. |
cronExpression | Lịch chạy, dùng cho LOOP hoặc CONTINUATION. Ví dụ 0/30 * * * * *. |
parameters | JSON chứa productCode và tuỳ chọn mailTemplateName. |
status | Nên đặt ACTIVATED để executor có thể chạy. |
Workflow, workflow step và workflow run đều cần ở trạng thái kích hoạt phù hợp. Nếu workflow run là
ONE_TIME, sau khi chạy xong hệ thống sẽ đánh dấu completed. Với LOOP hoặc CONTINUATION, hệ thống tính nextRunTime dựa trên cron expression.Mail Template Cần Có
Template mặc định là:
user_product_rating
Template có thể dùng các biến như:
Tên biến cụ thể phụ thuộc engine render mail template, nhưng dữ liệu đã được handler đưa vào
parameters.Các Kết Quả Và Lỗi Thường Gặp
Handler trả về chuỗi kết quả để executor ghi log:
| Kết quả | Nguyên nhân |
|---|---|
send mail successfully | Gửi email thành công. |
participantType is empty | Participant type không phải users. |
participant is invalid | Participant không phải mảng object. |
participants is invalid | Participant rỗng. |
user id: ... is invalid | Không tìm thấy user. |
user email is empty | Không có email nhận thư. |
mailTemplateName is empty | Template name bị rỗng. |
productCode is empty | Thiếu productCode trong parameters. |
product with code: ... not found | Không tìm thấy sản phẩm theo mã. |
Gợi Ý Cấu Hình Nhanh
Workflow step:
handlerName = send_product_rating_email_to_one_user status = ACTIVATED
Workflow run parameters:
{
"productCode": "demo-product",
"mailTemplateName": "user_product_rating"
}
Participant segment:
participantType = users
Script lấy participant nên trả về mỗi dòng theo dạng:
[lastId, userId, email]
Với cấu hình này, mỗi participant hợp lệ sẽ nhận một email mời đánh giá sản phẩm, trong đó link đánh giá đã gắn
productCode, userUuid và tên hiển thị của user nếu có.